<?  
  set_time_limit(4500);
  /* Se asegura que el archivo es incluido por el index */
    defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );  
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Libro_exe( $this );
    
	class Libro_exe extends Exe
	{
	function Libro_exe( &$oModule )
		{
			$this->Exe( $oModule );
		}
		// AGREGAR_LIBRO
		function insert()
		{
			// Convierte a variables los datos del Formulario asociado a la accion
			$oForm = $this->oModule->loadClass( 'Libro_frm' );
			extract( $oForm->getFieldArray() );
			// Busca el siguiente id
			$ncLibro      = $this->oDatabase->nextKey("btLibro", "ncLibro"  );
			$aRotulo = $oForm->aFields['aRotulos']->getValue();
			
			if ( $cTituloUniforme2 )
			{
				if ( $cTituloUniforme ) 
					addMessage('Ojo que se cargo titulo uniforme secundario y primario!, solo se toma el primario');
				else
				{
					$cTituloUniforme  = $cTituloUniforme2;
					$aRotulo[] = 1;
				}
			}
			if ( $cTituloCongreso2 )
			{
				if ( $cTituloCongreso ) 
					addMessage('Ojo que se cargo titulo del congreso secundario y primario!, solo se toma el primario' . $cTituloCongreso);
				else
				{
					$cTituloCongreso  = $cTituloCongreso2;
					$aRotulo[] = 2;
				}
			}
			$this->oDatabase->insert("btLibro"
								,"nRegistro", $nRegistro
								,"ncLibro", $ncLibro
								,"cContinua", $cContinua
								,"cContinuada", $cContinuada
								,"cEjemplares", $cEjemplares
								,"ncColeccion", $ncColeccion
								,"ncTipoFormato", $ncTipoFormato
								,"ncLugar", $ncLugar
								,"ncTipoContenido", $ncTipoContenido
								,"ncTipoMaterial", $ncTipoMaterial
								,"cdLibro", $cdLibro
								,"nEdicion", $nEdicion
								,"cUbicacion", $cUbicacion
								,"cISBN", $cISBN
								,"cISSN", $cISSN								
								,"cPalabrasClave", $cPalabrasClave
								,"cPalabrasPersonaClave", $cPalabrasPersonaClave
								,"cPalabrasGeograficoClave", $cPalabrasGeograficoClave
								,"cqEjemplares", $cqEjemplares
								,"dAlta", $dAlta
								,"dModificacion", $dModificacion
								,"cSerie", $cSerie
								,"cEdicion", $cEdicion
								,"cPeriodoPublicacion", $cPeriodoPublicacion
								,"cDescripcionFisica", $cDescripcionFisica
								,"cTituloUniforme", $cTituloUniforme
								,"cGeografico", $cGeografico
								,"cTituloNoControlado", $cTituloNoControlado								
								,"cTituloVariacion", $cTituloVariacion
								,"cTituloCongreso", $cTituloCongreso
								,"cFrecuencia", $cFrecuencia);
			// Agrega las Personas
				for( $ncRol = 1; $ncRol <= 3; $ncRol ++ )
				{
					if ( $oForm->aFields[ 'ncPersona' . $ncRol]->getValue() )
					{
						if ( $ncRol == 1 || $ncRol == 2 ) $cCargo = $oForm->aFields[ 'cCargo' . $ncRol]->getValue() ; 
						else $cCargo = '';
						$this->oDatabase->insert("btLibroPersona"
											,"ncLibro", $ncLibro
											,"ncRol", $ncRol
											,"cCargo", $cCargo
											,"ncPersona", $oForm->aFields[ 'ncPersona' . $ncRol]->getValue() );
					}
				}
			// Agrega las Organizaciones
				for( $ncRol = 10; $ncRol <= 12; $ncRol ++ )
				{
					if ( $oForm->aFields[ 'ncOrganizacion' . $ncRol]->getValue() )
					{
						if ( $ncRol == 11 || $ncRol == 12 ) $cCargo = $oForm->aFields[ 'cCargo' . $ncRol]->getValue() ; 
						else $cCargo = '';
						$this->oDatabase->insert("btLibroOrganizacion"
											,"ncLibro", $ncLibro
											,"ncRol", $ncRol
											,"cCargo", $cCargo
											,"ncOrganizacion", $oForm->aFields[ 'ncOrganizacion' . $ncRol]->getValue() );
					}
				}
			
			// Agrega las Notas
				list( $nqTipoNota, $nqMaxTipoNota ) = $this->oDatabase->getArray("SELECT count(*), max(ncTipoNota) FROM bcTipoNota");
				if ( $nqTipoNota != $nqMaxTipoNota  ) addMessage('Verifique los tipos de notas no estan serializados !!');
				for( $ncNota = $ncTipoNota = 1; $ncTipoNota <= $nqTipoNota; $ncTipoNota ++ )
				{
					if ( $oForm->aFields[ 'cdNota' . $ncTipoNota]->getValue()  )
					{
						$this->oDatabase->insert("btLibroNota"
											,"ncLibro", $ncLibro
											,"ncNota", $ncNota
											,"ncTipoNota", $ncTipoNota
											,"cdNota", $oForm->aFields[ 'cdNota' . $ncTipoNota]->getValue()  );
						$ncNota++;
					}
				}
			
			
			// Agrega los Idiomas
				$aIdioma = $oForm->aFields['aIdiomas']->getValue();
				foreach ( (array)$aIdioma as $ncIdioma )
				{
					$this->oDatabase->insert( "btLibroIdioma",
											"ncIdioma", $ncIdioma,
											"ncLibro", $ncLibro );
				}
			// Agrega los Generos
				$aGenero = $oForm->aFields['aGeneros']->getValue();
				foreach ( (array)$aGenero as $ncGenero )
				{
					$this->oDatabase->insert( "btLibroGenero",
											"ncGenero", $ncGenero,
											"ncLibro", $ncLibro );
				}
			// Agrega los Rotulos
				foreach ( (array)$aRotulo as $ncRotulo )
				{
					$this->oDatabase->insert( "btLibroRotulo",
											"ncRotulo", $ncRotulo,
											"ncLibro", $ncLibro );
				}

			// Agrega las Palabras
			$aPalabras = explode(';' , $cPalabrasClave);
			foreach($aPalabras as $cPalabra )
				$this->oDatabase->insert( "btPalabra",'ccPalabra', trim($cPalabra) );
				
			$aPalabras = explode(';' , $cPalabrasPersonaClave);
			foreach($aPalabras as $cPalabra )
				$this->oDatabase->insert( "btPalabraPersona",'ccPalabra', trim($cPalabra) );
				
			$aPalabras = explode(';' , $cPalabrasGeograficoClave);
			foreach($aPalabras as $cPalabra )
				$this->oDatabase->insert( "btPalabraGeografico",'ccPalabra', trim($cPalabra) );
				
			$this->setInputData( $ncLibro, $cdLibro );
		}
		
		// ELIMINAR_LIBRO
		function delete()
		{
			$ncLibro = getParam( 'ncLibro' );
			$this->oDatabase->update("btLibro","bBaja", 1,"WHERE", "ncLibro", $ncLibro );
		}
		function undelete()
		{
			$ncLibro = getParam( 'ncLibro' );
			$this->oDatabase->update("btLibro","bBaja", 0,"WHERE", "ncLibro", $ncLibro );
		}
		
		// MODIFICAR_LIBRO
		function update()
		{
			// Convierte a variables los datos del Formulario asociado a la accion
			$oForm = $this->oModule->loadClass( 'Libro_frm' );
			extract( $oForm->getFieldArray() );
			$this->oDatabase->update("btLibro"
								,"ncTipoFormato", $ncTipoFormato
								,"nRegistro", $nRegistro
								,"cContinua", $cContinua
								,"cContinuada", $cContinuada
								,"cEjemplares", $cEjemplares								
								,"ncColeccion", $ncColeccion
								,"ncLugar", $ncLugar
								,"ncTipoContenido", $ncTipoContenido
								,"ncTipoMaterial", $ncTipoMaterial
								,"cdLibro", $cdLibro
								,"nEdicion", $nEdicion
								,"cUbicacion", $cUbicacion
								,"cISBN", $cISBN
								,"cISSN", $cISSN
								,"cPalabrasClave", $cPalabrasClave
								,"cPalabrasGeograficoClave", $cPalabrasGeograficoClave
								,"cPalabrasPersonaClave", $cPalabrasPersonaClave
								,"cqEjemplares", $cqEjemplares
								,"dAlta", $dAlta
								,"dModificacion", $dModificacion
								,"cSerie", $cSerie
								,"cEdicion", $cEdicion
								,"cPeriodoPublicacion", $cPeriodoPublicacion
								,"cDescripcionFisica", $cDescripcionFisica
								,"cTituloUniforme", $cTituloUniforme
								,"cTituloCongreso", $cTituloCongreso
								,"cGeografico", $cGeografico
								,"cTituloNoControlado", $cTituloNoControlado
								,"cTituloVariacion", $cTituloVariacion
								,"cFrecuencia", $cFrecuencia
								,"WHERE"
								 ,"ncLibro", $ncLibro);
			// Agrega los Idiomas
				$bOk = $this->oDatabase->delete( "btLibroIdioma", "ncLibro", $ncLibro );
				$aIdioma = $oForm->aFields['aIdiomas']->getValue();
				foreach ( (array)$aIdioma as $ncIdioma )
				{
					$this->oDatabase->insert( "btLibroIdioma",
											"ncIdioma", $ncIdioma,
											"ncLibro", $ncLibro );
				}
			// Agrega los Generos
				$bOk = $this->oDatabase->delete( "btLibroGenero", "ncLibro", $ncLibro );
				$aGenero = $oForm->aFields['aGeneros']->getValue();
				foreach ( (array)$aGenero as $ncGenero )
				{
					$this->oDatabase->insert( "btLibroGenero",
											"ncGenero", $ncGenero,
											"ncLibro", $ncLibro );
				}
			// Agrega los Rotulos
				$bOk = $this->oDatabase->delete( "btLibroRotulo", "ncLibro", $ncLibro );
				$aRotulo = $oForm->aFields['aRotulos']->getValue();
				foreach ( (array)$aRotulo as $ncRotulo )
				{
					$this->oDatabase->insert( "btLibroRotulo",
											"ncRotulo", $ncRotulo,
											"ncLibro", $ncLibro );
				}
			// Agrega las Palabras
			$aPalabras = explode(';' , $cPalabrasClave);
			foreach($aPalabras as $cPalabra )
				$this->oDatabase->insert( "btPalabra",'ccPalabra', trim($cPalabra) );
			$aPalabras = explode(';' , $cPalabrasPersonaClave);
			foreach($aPalabras as $cPalabra )
				$this->oDatabase->insert( "btPalabraPersona",'ccPalabra', trim($cPalabra) );
			$aPalabras = explode(';' , $cPalabrasGeograficoClave);
			foreach($aPalabras as $cPalabra )
				$this->oDatabase->insert( "btPalabraGeografico",'ccPalabra', trim($cPalabra) );
			$this->setInputData( $ncLibro, $cdLibro );
		}
	}
?>